package com.bright.ghj.overt.manager;

import com.bright.ghj.common.pojo.dto.PageDTO;
import com.bright.ghj.overt.pojo.dto.OpenReportRecordDTO;
import com.bright.ghj.overt.pojo.query.OpenReportRecordQuery;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * @Author hxj
 * @Date 2023/12/26 11:59
 * @Description
 */
public interface OpenReportRecordManager {

    /**
     * 以id获取openReportRecord表记录
     * @param id
     * @return
     */
    OpenReportRecordDTO getById(Integer id);

    /**
     * 用id列表获取openReportRecord表记录
     * @param ids
     * @return
     */
    List<OpenReportRecordDTO> listById(List<Integer> ids);

    /**
     * 保存
     * @param openReportRecordDTO
     */
    void save(OpenReportRecordDTO openReportRecordDTO);

    /**
     * 批量保存
     * @param openReportRecordDTOS
     */
    void saveAll(List<OpenReportRecordDTO> openReportRecordDTOS);

    /**
     * 批量删除
     * @param openReportRecordDTOS
     */
    void deleteAll(List<OpenReportRecordDTO> openReportRecordDTOS);

    /**
     * 根据条件返回openReportRecord记录列表 分页
     * @return
     */
    PageDTO<OpenReportRecordDTO> pageByCondition(OpenReportRecordQuery query, int listType, Pageable pageable);

    /**
     * 返回openReportRecord记录列表 不分页
     * @param query
     * @param listType
     * @return
     */
    List<OpenReportRecordDTO> listByCondition(OpenReportRecordQuery query, int listType);

    /**
     * 是否已审核 注意：未审核通过也属于已审核
     * @param openReportRecord
     * @return
     */
    boolean isAudit(OpenReportRecordDTO openReportRecord);

    /**
     * 是否已通过审核 排除未通过审核的情况
     * @param openReportRecord
     * @return
     */
    boolean isAuditOK(OpenReportRecordDTO openReportRecord);

    /**
     * 是否已发布
     * @param openReportRecord
     * @return
     */
    boolean isPublished(OpenReportRecordDTO openReportRecord);

    /**
     * 是否允许可编辑
     * @param openReportRecord
     * @return
     */
    boolean isEditEnable(OpenReportRecordDTO openReportRecord);

    /**
     * 设置提交报审状态
     * @param openReportRecord 数据实体对象
     */
    void setReadyAuditStatus(OpenReportRecordDTO openReportRecord);

    /**
     * 设置审核通过并待发布状态
     * @param openReportRecord 数据实体对象
     */
    void setAuditSuccessAndReadyPublishStatus(OpenReportRecordDTO openReportRecord, String operator);

    /**
     * 设置审核失败不通过状态
     *
     * @param openReportRecord 数据实体对象
     * @param operator
     */
    void setAuditFailStatus(OpenReportRecordDTO openReportRecord, String operator);

    /**
     * 设置已发布并待上传党廉状态
     * @param openReportRecord 数据实体对象
     */
    void setPublishedAndReadyCityUploadStatus(OpenReportRecordDTO openReportRecord, String operator);

    /**
     * 设置已上传党廉状态
     * @param openReportRecord 数据实体对象
     */
    void setPublishedStatus(OpenReportRecordDTO openReportRecord, String operator);

    /**
     * 设置退回待处理状态
     * @param openReportRecordDTO 对象
     */
    void setReturnToStartStatus(OpenReportRecordDTO openReportRecordDTO, String operator);

    /**
     * 根据id获取某些字段的值 财务公开获取脚注用
     * @param id
     * @param fieldNames
     * @return
     */
    Map<String, Object> getFieldValueByFieldNames(Integer id, List<String> fieldNames);

    @Transactional
    void updateParamsById(Integer id, Map<String, Object> params);
}
